package registration;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Emailer implements Runnable{

	private static final String SMTP_HOST_NAME = "smtp.gmail.com";
	private static final String SMTP_PORT = "465";
	private static final String emailFromAddress = "e.voting.guc@gmail.com";
	private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
	private static final String username = "e.voting.guc@gmail.com";
	private static final String password = "GUC123456";
	private static final boolean debug = false;
	private String message;
	private String subject;
	private String[] recipients;



	public Emailer(String sendTo , String emailSubjectTxt, String emailMsgTxt )
	{
		//Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
		
		this.recipients = new String[]{sendTo};
		this.subject = emailSubjectTxt;
		this.message = emailMsgTxt;
	}

	public void sendSSLMessage() throws MessagingException {
		

		Properties props = new Properties();
		props.put("mail.smtp.host", SMTP_HOST_NAME);
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.port", SMTP_PORT);
		props.put("mail.smtp.socketFactory.port", SMTP_PORT);
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
		props.put("mail.smtp.socketFactory.fallback", "false");
		if(debug)
		{
			props.put("mail.debug", "true");
		}

		Session session = Session.getDefaultInstance(props,
				new javax.mail.Authenticator() {

			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication(username, password);
			}
		});

		session.setDebug(debug);

		Message msg = new MimeMessage(session);
		InternetAddress addressFrom = new InternetAddress(emailFromAddress);
		msg.setFrom(addressFrom);

		InternetAddress[] addressTo = new InternetAddress[recipients.length];
		for (int i = 0; i < recipients.length; i++) {
			addressTo[i] = new InternetAddress(recipients[i]);
		}
		msg.setRecipients(Message.RecipientType.TO, addressTo);

		// Setting the Subject and Content Type
		msg.setSubject(subject);
		msg.setContent(message, "text/plain");
		Transport.send(msg);
	}

	@Override
	public void run() {
		try {
			sendSSLMessage();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
		
	}
	
	
}


